// 初始化数据库
const db = wx.cloud.database();

// 添加 
const add = (collectionName,data={}) => {
  return db.collection(collectionName).add({data})
}
// 查询所有
// orderBy 排序
const findAll = async (collectionName,where={},orderBy={field:"_id",sort:"asc"}) =>{
  const MAX_LIMIT = 20
  // 先取出集合记录总数
  const countResult = await db.collection(collectionName).count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 20)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection(collectionName).orderBy(orderBy.field,orderBy.sort).where(where).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}
// 删除
const removeByid = (collectionName,_id) =>{
  return db.collection(collectionName).doc(_id).remove( )
}
// 修改api 通过id data为要修改的内容
const updaById = (collectionName,_id,data) =>{
  return db.collection(collectionName).doc(_id).update({data})
}
// 查询 ID
const findById = (collectionName,_id)=>{
  return db.collection(collectionName).doc(_id).get()
}
// 查询 分页
const find = (collectionName,where={},limit=5,page=1,orderBy={field:"_id",sort:"asc"}) =>{
  // limit 分页个数  skip 跳转个数
  let skip = (page-1) * limit;
  return db.collection(collectionName).where(where).limit(limit).skip(skip).orderBy(orderBy.field,orderBy.sort).get()
}
// 删除 通过where
const removeByWhere = (collectionName,where={}) =>{
  return db.collection(collectionName).where(where).remove( )
}
export default {
  add,
  findAll,
  removeByid,
  updaById,
  find,
  db,
  findById,
  removeByWhere
}